﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Projeto
{
    public partial class FormCadastrarCliente : Form
    {
        //VARIAVEIS GLOBAIS
        private PoolConexoes conexoes = new PoolConexoes();
        private ValidaFormulario valida = new ValidaFormulario();

        public FormCadastrarCliente()
        {
            InitializeComponent();
        }

        private void buttonCadastrar_Click(object sender, EventArgs e)
        {
            if (buttonCadastrar.Text.Equals("Cadastrar"))
            {
                cadastrarCliente();
            }
            else if (buttonCadastrar.Text.Equals("Alterar"))
            {
                alterarDadosCliente();
            }
        }

        //METODO VALIDA DADOS E CADASTRA FORNECEDOR
        private void cadastrarCliente()
        {
            Cliente cliente = getFormCliente();
            ArrayList mensagens = valida.validaCliente(cliente);

            if (mensagens.Count > 0)
            {
                String mensagem = (String)mensagens[0];
                MessageBox.Show(mensagem);
            }
            else
            {
                try
                {
                    bool insert = conexoes.insertCliente(cliente);

                    if (insert)
                    {
                        MessageBox.Show("Cadastro salvo com sucesso.");
                        limpar();
                    }
                    else
                    {
                        MessageBox.Show("Erro ao cadastrar Cliente.");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Erro ao cadastrar Cliente.");
                }
            }
        }

        //METODO VERIFICA E REALIZA UPDATE NO CADASTRO DO FORNECEDOR
        private void alterarDadosCliente()
        {

            Cliente cliente = conexoes.getCliente(textBoxCodCliente.Text);

            Boolean isAlterar = isAlteracao(cliente);

            if (isAlterar)
            {

                Cliente novoCliente = getFormCliente();

                try
                {
                    bool insert = conexoes.updateCliente(novoCliente);

                    if (insert)
                    {
                        MessageBox.Show("Cadastro alterado com sucesso.");
                    }
                    else
                    {
                        MessageBox.Show("Erro ao alterar Cliente.");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Erro ao alterar Cliente.");
                }
            }

        }

        //METODO VALIDA CAMPOS ALTERADOS
        private Boolean isAlteracao(Cliente cliente)
        {
            if (!cliente.CodCliente.Equals(textBoxCodCliente))
            {
                return true;
            }

            if (!cliente.RazaoSocial.Equals(textBoxRazaoSocial))
            {
                return true;
            }

            if (!cliente.RazaoSocial.Equals(textBoxRazaoSocial))
            {
                return true;
            }

            if (!cliente.Cnpj.Equals(textBoxCNPJ))
            {
                return true;
            }

            if (!cliente.Telefone.Equals(textBoxTelefone))
            {
                return true;
            }

            if (!cliente.Endereco.Equals(textBoxEndereco))
            {
                return true;
            }

            if (!cliente.Numero.Equals(textBoxNumEnd))
            {
                return true;
            }

            if (!cliente.Bairro.Equals(textBoxBairro))
            {
                return true;
            }

            if (!cliente.Cidade.Equals(textBoxCidade))
            {
                return true;
            }

            if (!cliente.Estado.Equals(textBoxEstado))
            {
                return true;
            }

            if (!cliente.Cep.Equals(textBoxCEP))
            {
                return true;
            }

            return false;
        }

        //METODO RETORNA INSTANCIA DE CLIENTE COM VALORES DOS CAMPOS DO FORM
        private Cliente getFormCliente()
        {
            Cliente cliente = new Cliente();
            cliente.CodCliente = textBoxCodCliente.Text;
            cliente.RazaoSocial = textBoxRazaoSocial.Text;
            cliente.Cnpj = textBoxCNPJ.Text;
            cliente.Telefone = textBoxTelefone.Text;
            cliente.Endereco = textBoxEndereco.Text;
            cliente.Numero = textBoxNumEnd.Text;
            cliente.Bairro = textBoxBairro.Text;
            cliente.Cidade = textBoxCidade.Text;
            cliente.Estado = textBoxEstado.Text;
            cliente.Cep = textBoxCEP.Text;

            return cliente;
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            if (!textBoxCodCliente.Text.Equals(""))
            {
                if (MessageBox.Show("Deseja realmente excluir Cliente?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) deletaCliente();
            }
        }

        //DELETA CADASTRO FORNECEDOR
        private void deletaCliente()
        {
            if (!textBoxCodCliente.Text.Equals(""))
            {
                bool isExcluido = conexoes.excluirCliente(textBoxCodCliente.Text);

                if (isExcluido)
                {
                    MessageBox.Show("Cadastro Excluido com sucesso.");
                    limpar();
                }
                else
                {
                    MessageBox.Show("Erro ao excluir Cliente.");
                }

            }
        }

        //METODO LIMPA TODOS OS CAMPOS DO FORMULARIO
        private void limpar()
        {
            textBoxCodCliente.Text = "";
            textBoxRazaoSocial.Text = "";
            textBoxCNPJ.Text = "";
            textBoxTelefone.Text = "";
            textBoxEndereco.Text = "";
            textBoxNumEnd.Text = "";
            textBoxBairro.Text = "";
            textBoxCidade.Text = "";
            textBoxEstado.Text = "";
            textBoxCEP.Text = "";

            buttonCadastrar.Text = "Cadastrar";
        }

        private void buttonLimpar_Click(object sender, EventArgs e)
        {
            limpar();
            textBoxCodCliente.Enabled = true;
        }

        private void carregarClienteById(String codCliente)
        {

            Cliente cliente = conexoes.getCliente(codCliente);

            if (cliente != null)
            {
                textBoxRazaoSocial.Text = cliente.RazaoSocial;
                textBoxCNPJ.Text = cliente.Cnpj;
                textBoxTelefone.Text = cliente.Telefone;
                textBoxEndereco.Text = cliente.Endereco;
                textBoxNumEnd.Text = cliente.Numero;
                textBoxBairro.Text = cliente.Bairro;
                textBoxCidade.Text = cliente.Cidade;
                textBoxEstado.Text = cliente.Estado;
                textBoxCEP.Text = cliente.Cep;

                buttonCadastrar.Text = "Alterar";
                textBoxCodCliente.Enabled = false;
            }
        }

        private void textBoxCodCliente_Leave(object sender, EventArgs e)
        {
            if (!textBoxCodCliente.Text.Equals(""))
            {
                carregarClienteById(textBoxCodCliente.Text);
            }
        }



    }
}
